package com.wskj.easybuy.controller;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;



/**
 * 
 * @author Administrator
 * 处理所有请求的  基础的 servlet 
 *        进行参数的封装,跳转指定的servlet的方法中         
 *   通过 method 属性指定 进入方法的名称  
 */
public class BaseServlet extends HttpServlet {

	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
			
		String  methodName=req.getParameter("method");
		//判断是否有method 属性 
		if(methodName==null || methodName.trim().isEmpty()){			
			throw new RuntimeException("请确定请求参数中含有请求的方法 method!");
		    
		}
		
		try {
			
		 Method  method=	this.getClass().getMethod(methodName, this.getClass());
		 String result =(String) method.invoke(req, resp); 
		   
		   //如果没有返回值  就不执行 
		   if(result==null){			   
			   return;
		   }
		   
		   if(result.contains(":")){
			   
			   String  r=result.split(":")[0];
			   String  path=result.split(":")[1];
			   
			   if(r.equalsIgnoreCase("redirect")){
				   //重定向到 请求的地址 
				   resp.sendRedirect(req.getContextPath()+"/"+path);
				   				   
			   }else{
				   //转发到具体的页面
				   req.getRequestDispatcher(path).forward(req, resp);
			   }
			   
			   
		   }else{
			   //默认没有:就直接转发 			   
			  req.getRequestDispatcher(result).forward(req, resp);
		   }
		   		   
		   // 判断返回的结果值  redirect:   通过 :进行拆分  
		   // dispatcher().foraward(req,resp);
		   	
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			System.out.println("类中没有这个方法！");
			e.printStackTrace();
		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}	
}
